<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class a_cliente extends CI_Controller {
    private $sessao = "";

    function __construct(){
        parent::__construct();
        $this->load->model("ClienteModel");
        $this->load->model("UsuarioModel");
        $this->load->model("Selects");
        $this->load->model("Log");
        $this->load->helper("mail");
        $this->load->helper("auth");
        //$this->sessao = a_logado();
       
    }
    public function teste(){
        $this->load->library('email');
        //for($i=1000; $i<1150; $i++){
        emailTeste();

       // }
    }
    public function teste2(){
        $this->load->library('email');
        //for($i=1000; $i<1150; $i++){
        emailCadastroCliente("emedevas@gmail.com", "André");

       // }
    }

     public function cadastro_email(){

        $this->load->helper("form");
        $this->load->library("form_validation");

        $dados = array(
            "titulo" => "Cadastro no Newsletter",
            "user" => "Visitante",
            "erro" => ""
            );

        $main = array(
            "dados" => $dados,
            "link" => "all/a_cad_cliente_email_view",
            );

        //Validação dos campos
        $this->form_validation->set_rules('email', 'E-mail', 'required|valid_email|callback_email_check');

        if ($this->form_validation->run() == false) :
            $this->load->view('template', $main);

        else :
            //MANDAR EMAIL AQUI
            $idInserido = $this->NewsletterModel->inserir($campos);
            emailCadastroNewsLetter($this->input->post('email'));

            $this->Log->inserir(tipo_usuario(), id_tipo_usuario(), "se cadastrou", "newsletter", $idInserido);
            redirect("home/index/sucesso");
        endif;
    }

      public function cadastrar(){

        $this->load->helper("form");
        $this->load->library("form_validation");

        $res = $this->db->get("estados");

        if( $res->num_rows() > 0 ) :
            $estados = "";
            foreach($res->result() as $estado) :
                $estados .= "<option value=\"$estado->abrev_uf\" ". set_select("estado", $estado->abrev_uf). ">$estado->nm_uf</option>\n";
            endforeach;

        endif;

         //INICIO CAPTCHA
        $this->load->helper('captcha');

        $vals = array(
            'img_path' => 'captcha/',
            'img_url' => base_url().'captcha/',
            'img_width' => 200,
            'img_height' => 60,
            'expiration' => 900
            );
        $cap = create_captcha($vals);

        $data = array(
            'captcha_time' => $cap['time'],
            'ip_address' => $this->input->ip_address(),
            'word' => $cap['word']
            );

        $query = $this->db->insert_string('captcha', $data);
        $this->db->query($query);
        // FIM CAPTCHA

        $dados = array(
            "titulo" => "Cadastro de Clientes",
            "user" => "Visitante",
            "estados" => $estados,
            "erro" => "",
            "cap" => $cap,
            "captcha_fail" => ""
            );

        $main = array(
            "dados" => $dados,
            "link" => "all/a_cad_cliente_view",
            );

        //Validação dos campos
        $this->form_validation->set_rules('nome', 'Nome', 'required|min_length[4]');
        $this->form_validation->set_rules('sobrenome', 'Sobrenome', 'required|min_length[4]');
        $this->form_validation->set_rules('tipoPessoa', 'tipoPessoa', 'required');
        $this->form_validation->set_rules('email', 'E-mail', 'required|valid_email|callback_email_check');
        $this->form_validation->set_rules('website', 'Website');
        $this->form_validation->set_rules('telefone', 'Telefone', 'required');
        $this->form_validation->set_rules('pais', 'Pa&iacute;s', 'required');
        $this->form_validation->set_rules('cidade', 'Cidade', 'required');
        $this->form_validation->set_rules('estado', 'Estado', 'required');
        $this->form_validation->set_rules('senha', 'Senha', 'required|md5');
        $this->form_validation->set_rules('senha2', 'Confirmar senha', 'required|matches[senha]');
        $this->form_validation->set_rules('fax', 'Fax' );
        $this->form_validation->set_rules('celular', 'Celular' );
        $this->form_validation->set_rules('endereco', 'Endereco', 'required');
        $this->form_validation->set_rules('numero', 'Numero', 'required');
        $this->form_validation->set_rules('complemento', 'Complemento');
        $this->form_validation->set_rules('termos_do_contrato', 'Termos do Contrato', 'required');
        $this->form_validation->set_rules('cep', 'CEP', 'required|min_lenght[8]');

        if($this->input->post("tipoPessoa") == "juridica"){
            $this->form_validation->set_rules('razaoSocial', 'Razão Social', 'required');
            $this->form_validation->set_rules('cnpj', 'CNPJ', 'required|callback_cnpj_check|callback_cnpj_validacao');
        }
        else
            $this->form_validation->set_rules('cnpj', 'CPF', 'required|callback_cnpj_check|callback_cpf_validacao');

        if ($this->form_validation->run() == false) 
            $this->load->view('template', $main);

        else {
            // INICIO VERIFICACAO CAPTCHA
            // Deleta os old captchas e as imagens
            $expiration = time()-900; // 15 MIN
           

            // Then see if a captcha exists:
            $sql = "SELECT COUNT(*) AS count FROM captcha WHERE word = ? AND ip_address = ? AND captcha_time > ?";
            $binds = array($_POST['captcha'], $this->input->ip_address(), $expiration);
            $query = $this->db->query($sql, $binds);
            $row = $query->row();

            if ($row->count == 0){
                $dados["captcha_fail"] = "Você deve escrever os caracteres que aparecem na imagem";
                $main['dados'] = $dados;
                $this->load->view('template', $main);
            }
            //FIM VERIFICACAO CAPTCHA

            else{

                $this->db->query("DELETE FROM captcha WHERE captcha_time < ".$expiration);
                 //deleta os arquivos da pasta captcha e cria uma nova
                //rrmdir();
                //mkdir("captcha");

                $campos = array(
                    "nome" => $this->input->post("nome"),
                    "sobrenome" => $this->input->post("sobrenome"),
                    "tipoPessoa" => $this->input->post("tipoPessoa"),
                    "cnpj" => $this->input->post("cnpj"),
                    "email" => $this->input->post("email"),
                    "website" => $this->input->post("website"),
                    "telefone" => $this->input->post("telefone"),
                    "pais" => $this->input->post("pais"),
                    "cidade" => $this->input->post("cidade"),
                    "estado" => $this->input->post("estado"),
                    "fax" => $this->input->post("fax"),
                    "celular" => $this->input->post("celular"),
                    "senha" => $this->input->post("senha"),
                    "endereco" => $this->input->post("endereco"),
                    "numero" => $this->input->post("numero"),
                    "cep" => $this->input->post("cep"),
                    "complemento" => $this->input->post("complemento"),
                    "dataCadastro" => timestamp(),
                    "validacaoEmail" => md5($this->input->post("email"))
                );
                if ($this->input->post("razaoSocial"))
                    $campos['razaoSocial'] = $this->input->post("razaoSocial");
                
                $idInserido = $this->ClienteModel->inserir($campos);

                $cliente = $this->ClienteModel->getCliente($idInserido);
                $usuario = array(
                    "idCliente" => $cliente->idCliente,
                    "email" => $campos['email'],
                    "nome" => $campos['nome'],
                    "sobrenome" => $campos['sobrenome'],
                    "senha" => $campos['senha'],
                    "ativo" => true,
                    "dataCadastro" => strtotime("now")
                );
                $this->UsuarioModel->inserir($usuario);

                emailCadastroCliente($this->input->post('email'), $this->input->post('nome'));

                $this->Log->inserir(tipo_usuario(), id_tipo_usuario(), "se cadastrou", "cliente", $idInserido);
                redirect("home/index/cadastro_cliente");
            }
        }
    }


    function validar_email($validacao_email = ""){
        if($validacao_email == ""){
            show_error("Voce n&atilde;o pode fazer isso");
        }
        $cliente = $this->ClienteModel->getClienteValidacaoEmail($validacao_email);
        if($cliente == false){
            show_error("Código de validação inválido!");
            }
        else{
            if($cliente->autorizado == true) show_error ("Este e-mail j&aacute; foi validado!");
            $dados['autorizado'] = true;
            $this->ClienteModel->update($cliente->idCliente,$dados);
            $this->Log->inserir(tipo_usuario(), id_tipo_usuario(), "cofirmou cadastro", "cliente", $cliente->idCliente);
            redirect('home/index/cadastro_sucesso');
        }
    }

    function email_check($str){
        if ($this->ClienteModel->getClienteEmail($str) != false) :
            $this->form_validation->set_message('email_check', 'Já há um cadastro com este e-mail.');
            return FALSE;

        else :
            return TRUE;

        endif;
    }
    
    function cnpj_check($str){
        if ($this->ClienteModel->getClienteCnpj($str) != false) :
            $this->form_validation->set_message('cnpj_check', 'Já há um cadastro com este CNPJ ou CPF.');
            return FALSE;

        else :
            return TRUE;

        endif;
    }

    function cnpj_validacao($cnpj){
        $this->form_validation->set_message('cnpj_validacao', 'Digite um CNPJ Valido.');
        if (strlen($cnpj) <> 18) return FALSE;
        $soma1 = ($cnpj[0] * 5) +

        ($cnpj[1] * 4) +
        ($cnpj[3] * 3) +
        ($cnpj[4] * 2) +
        ($cnpj[5] * 9) +
        ($cnpj[7] * 8) +
        ($cnpj[8] * 7) +
        ($cnpj[9] * 6) +
        ($cnpj[11] * 5) +
        ($cnpj[12] * 4) +
        ($cnpj[13] * 3) +
        ($cnpj[14] * 2);
        $resto = $soma1 % 11;
        $digito1 = $resto < 2 ? 0 : 11 - $resto;
        $soma2 = ($cnpj[0] * 6) +

        ($cnpj[1] * 5) +
        ($cnpj[3] * 4) +
        ($cnpj[4] * 3) +
        ($cnpj[5] * 2) +
        ($cnpj[7] * 9) +
        ($cnpj[8] * 8) +
        ($cnpj[9] * 7) +
        ($cnpj[11] * 6) +
        ($cnpj[12] * 5) +
        ($cnpj[13] * 4) +
        ($cnpj[14] * 3) +
        ($cnpj[16] * 2);
        $resto = $soma2 % 11;
        $digito2 = $resto < 2 ? 0 : 11 - $resto;
        if (($cnpj[16] == $digito1) && ($cnpj[17] == $digito2))
            return TRUE;
        else{
            return FALSE;
        }
    }


    function cpf_validacao($cpf) {
        $cpf = str_replace(".", "", $cpf);
        $cpf = str_replace("-", "", $cpf);
    // verifica se e numerico
        $this->form_validation->set_message('cpf_validacao', 'Digite um CPF Valido.');
        if(!is_numeric($cpf)) {
            return false;
        }

        // verifica se esta usando a repeticao de um numero
        if( ($cpf == '11111111111') || ($cpf == '22222222222') || ($cpf == '33333333333') || ($cpf == '44444444444') || ($cpf == '55555555555') || ($cpf == '66666666666') || ($cpf == '77777777777') || ($cpf == '88888888888') || ($cpf == '99999999999') || ($cpf == '00000000000') ) {
        return false;
        }

        //PEGA O DIGITO VERIFIACADOR
        $dv_informado = substr($cpf, 9,2);

        for($i=0; $i<=8; $i++) {
            $digito[$i] = substr($cpf, $i,1);
        }

        //CALCULA O VALOR DO 10º DIGITO DE VERIFICAÇÂO
        $posicao = 10;
        $soma = 0;

        for($i=0; $i<=8; $i++) {
            $soma = $soma + $digito[$i] * $posicao;
            $posicao = $posicao - 1;
        }

        $digito[9] = $soma % 11;

        if($digito[9] < 2) {
            $digito[9] = 0;
        } else {
            $digito[9] = 11 - $digito[9];
        }

        //CALCULA O VALOR DO 11º DIGITO DE VERIFICAÇÃO
        $posicao = 11;
        $soma = 0;

        for ($i=0; $i<=9; $i++) {
            $soma = $soma + $digito[$i] * $posicao;
            $posicao = $posicao - 1;
        }

        $digito[10] = $soma % 11;

        if ($digito[10] < 2) {
            $digito[10] = 0;
        }
        else {
            $digito[10] = 11 - $digito[10];
        }

        //VERIFICA SE O DV CALCULADO É IGUAL AO INFORMADO
        $dv = $digito[9] * 10 + $digito[10];
        if ($dv != $dv_informado) {
            return false;
        }

            return true;
    }
}